class: center, middle, inverse, title-slide # Visualización y Análisis en
## Sesión II ### Javier Tamayo Leiva
### Pontificia Universidad Católica de Valparaíso ### Junio 22, 2021 --- <style> .title-slide { background-size: 30%; background-position: center left; } .fa { vertical-align: middle; } .center2 { margin: 0; position: absolute; top: 50%; left: 50%; -ms-transform: translate(-50%, -50%); transform: translate(-50%, -50%); } body { text-align: justify; } .title-slide h1 { color: #F2EAD0; font-size: 90px; # font-family: "blacksword"; } .title-slide, .title-slide h2, .title-slide h3 { color: #FFF9F2; # font-family: 'Cormorant Garamond', serif; } .remark-slide-number { position: inherit; } .remark-slide-number .progress-bar-container { position: absolute; bottom: 0; height: 4px; display: block; left: 0; right: 0; } .remark-slide-number .progress-bar { height: 100%; background-color: #F2CB07; } .left-code { color: #777; width: 38%; height: 92%; float: left; } .right-plot { width: 60%; float: right; padding-left: 1%; } .small .remark-code { /*Change made here*/ font-size: 65% !important; } .medium .remark-code { /*Change made here*/ font-size: 75% !important; } </style> ## Análisis exploratorio de datos (*Exploratory data analysis*) .pull-left[ ### Estadística descriptiva - {gtsummary} package <br><br> - Visualizando distribuciones <br> - `stat_summary()` <br> - Boxplot <br> - Histograms, Density plot, Heatmaps<br> - {ggpubr} package <br> - q-q plots<br><br> - Análisis de normalidad <br> - Shapiro–Wilk test <br> - Kolmogorov-Smirnov test <br><br> - Análisis de Homocedasticidad <br> - Bartlett’s test <br> - Fligner-Killeen test <br> ] .pull-right[ ### Inferencia Estadística - Análisis de correlación <br> - Pearson's *r* <br> - Spearman's *ρ* (rho) <br> - Kendall's *τ* (tau) <br><br> - Reducción de dimensión <br> - Análisis de componentes principales (*PCA*) <br><br> - Modelos Liniales <br> - `lm()` <br><br> - Análisis de varianza <br> - F-test <br> - ANOVA test <br> - Kruskal-Wallis test <br><br> - {report} package <br> ] --- ## Dependencias de esta clase ```r # Instalar desde CRAN (The Comprehensive R Archive Network) install.packages(c("tidyverse", "ggplot2", "gtsummary", "flextable","Hmisc","corrplot")) ``` ```r # Cargar desde la librería library(tidyverse) library(ggplot2) library(gtsummary) library(flextable) library(Hmisc) library(corrplot) ``` --- class: inverse center middle # Análisis exploratorio de datos <br> --- ## Análisis exploratorio de datos El análisis exploratorio de datos o “EDA” (por sus siglas en inglés **E**xploratory **D**ata **A**nalysis), es como se conoce -en estadística- el proceso por el cual un investigador inspecciona un set de datos con la finalidad de generar preguntas, procesar y adquirir conocimiento (procesa datos, genera resultados), y refina o genera nuevas preguntas. <br> ### Proceso 1. Generar preguntas basandose en los datos. <br> 1. Obtener resultados (procesa datos, gráficos, modelos, etc.). <br> 1. Refinar preguntas y/o generar nuevas preguntas. <br><br> Si bien el nombre puede generar la impresión de un proceso estandarizado, en la práctica no hay reglas que limiten los análisis o técnicas utilizadas para generar el proceso iterativo. Sin embargo, existen análisis que se vuelven recurrentes durante el proceso. <br> .footnote[Análisis exploratorio de datos [(EDA) R4DS-ES](https://es.r4ds.hadley.nz/análisis-exploratorio-de-datos-eda.html)] --- class: inverse center middle ## Estadística descriptiva --- ## Los datos (ggplot2::diamonds)
Precio de mas de 50,000 diamantes cortados <br> --- ## paquete-**gtsummary** ```r # Instalar desde CRAN (The Comprehensive R Archive Network) install.packages("gtsummary") # Instalar la versión beta desde GitHub install.packages("remotes") remotes::install_github("ddsjoberg/gtsummary") # Para guardar tablas en formato PDF, Word o PowerPoint # Instalar desde CRAN (The Comprehensive R Archive Network) install.packages("flextable") # Instalar la versión beta desde GitHub devtools::install_github("davidgohel/flextable") ``` ```r # Cargar desde la librería library(gtsummary) library(flextable) ``` .footnote[[{gtsummary}](http://www.danieldsjoberg.com/gtsummary/index.html) package <br> [{gtsummary}](http://www.danieldsjoberg.com/gtsummary/reference/index.html) package reference] --- ## Resumir data con **gtsummary** ```r dmnd2 <- diamonds %>% select(cut) # Seleccionar solo columnas "class" desde mpg. Se pueden seleccionar # varias columnas en "select()". Ej select(class, year, ...) # También se pueden usar todas las columnas sí se saltan este paso. tbl_summary(dmnd2) %>% modify_header(label = "**Samples**") # Resumir data ```
Samples
N = 53,940
1
cut
Fair
1,610 (3.0%)
Good
4,906 (9.1%)
Very Good
12,082 (22%)
Premium
13,791 (26%)
Ideal
21,551 (40%)
1
n (%)
--- ## Resumir data con **gtsummary** ```r # Crear tabla resumen diamonds %>% tbl_cross(row = cut, col = color) %>% bold_labels() ``` .medium[
Characteristic
color
Total
D
E
F
G
H
I
J
cut
Fair
163
224
312
314
303
175
119
1,610
Good
662
933
909
871
702
522
307
4,906
Very Good
1,513
2,400
2,164
2,299
1,824
1,204
678
12,082
Premium
1,603
2,337
2,331
2,924
2,360
1,428
808
13,791
Ideal
2,834
3,903
3,826
4,884
3,115
2,093
896
21,551
Total
6,775
9,797
9,542
11,292
8,304
5,422
2,808
53,940
] ```r # Guardar en formato Word diamonds %>% tbl_cross(row = color, col = cut) %>% bold_labels() %>% as_flex_table() %>% # Transforma el elemento para su compatibilidad con {flextable} flextable::save_as_docx(path = "./diamonds.docx") # Nombre y ruta al documento Word a crear ``` --- class: inverse center middle ## Estadística descriptiva ### Visualizando distribuciones --- --- ## paquete-**ggpubr** ```r # Instalar desde CRAN (The Comprehensive R Archive Network) install.packages("ggpubr") # Instalar la versión beta desde GitHub install.packages("devtools") devtools::install_github("kassambara/ggpubr") ``` ```r # Cargar desde la librería library(ggpubr) ``` .footnote[[{ggpubr}](http://rpkgs.datanovia.com/ggpubr/index.html) package] --- ## Q-Q plot Q-Q plot (*quantile-quantile* plot) dibuja la correlación entre la muestra de interés y una distribución normal. .left-code[ Versión {ggpubr} package ```r ggqqplot(diamonds$price) ``` Versión {ggplot2} package ```r ggplot(diamonds, aes(sample=price))+ stat_qq() ``` ] .right-plot[ <img src="data:image/png;base64,#Sesion_002_files/figure-html/plot-qq-out-1.png" width="576" /> > <small> Versión {ggpubr} package</small> ] --- class: inverse center middle ## Estadística descriptiva ### Análisis de normalidad --- ## Pueba de normalidad Shapiro-Wilk .pull-left[ ### Shapiro-Wilk (SW) test H0 = La variable muestra una distribución normal <br> H1 = La variable no muestra una distribución normal <br> > Para grupos pequeños N < 5000 ### Interpretación p-value > alfa: No rechazar H0 (normal) <br> p-value < alfa: Rechazar H0 (no normal) <br> > alpha hipotético 5% (0,05) ] .pull-right[ ```r dmnds<- diamonds %>% slice_sample(n = 5000) shapiro.test(dmnds$price) ``` ``` ## ## Shapiro-Wilk normality test ## ## data: dmnds$price ## W = 0.7945, p-value < 2.2e-16 ``` ```r # 1) Crear serie entre -50 y 50, cada 5 "x" # 2) Crear distribución normal "y" x = seq(-50, 50, by=5) y = dnorm(x, mean(x), sd(x)) shapiro.test(dnorm(x, mean(x), sd(x))) ``` ``` ## ## Shapiro-Wilk normality test ## ## data: dnorm(x, mean(x), sd(x)) ## W = 0.91339, p-value = 0.0641 ``` ] --- ## Pueba de normalidad Kolmogorov-Smirnov .pull-left[ ### Kolmogorov-Smirnov (KS) test H0 = La variable muestra una distribución normal <br> H1 = La variable no muestra una distribución normal <br> > Menos robusto que SW, pero no limita el N ### Interpretación p-value > alfa: No rechazar H0 (normal) <br> p-value < alfa: Rechazar H0 (no normal) <br> > alpha hipotético 5% (0,05) ] .pull-right[ ```r ks.test(diamonds$price, "pnorm", mean=mean(diamonds$price),sd=sd(diamonds$price)) ``` ``` ## ## One-sample Kolmogorov-Smirnov test ## ## data: diamonds$price ## D = 0.18467, p-value < 2.2e-16 ## alternative hypothesis: two-sided ``` ```r # 1) Crear serie entre -50 y 50, cada 5 "x" # 2) Crear distribución normal "y" x = seq(-50, 50, by=5) y = dnorm(x, mean(x), sd(x)) ks.test(x, "pnorm", mean=mean(x), sd=sd(x)) ``` ``` ## ## One-sample Kolmogorov-Smirnov test ## ## data: x ## D = 0.075542, p-value = 0.999 ## alternative hypothesis: two-sided ``` ] --- ## Distribución de referencia `stat_overlay_normal_density()`de **ggpubr** permite dibujar una distribución normal sobre la distribución de la muestra de interés. ```r ggdensity(data=diamonds, x = "price", fill = "lightgreen") + stat_overlay_normal_density(color = "darkblue", linetype = "dashed") ``` .center[ <img src="data:image/png;base64,#Sesion_002_files/figure-html/plot-sond-out-1.png" width="360" /> ] .footnote[[{ggpubr}](http://rpkgs.datanovia.com/ggpubr/reference/stat_overlay_normal_density.html) package - function] --- class: inverse center middle ## Estadística descriptiva ### Análisis de Homocedasticidad --- ## Pueba de homocedasticidad Bartlett’s test .pull-left[ ### Bartlett’s test Se usa para probar la homogeneidad de varianza (homocedasticidad) en k grupos de muestras, donde k puede ser mayor a dos. Está adaptado para datos distribuidos normalmente. <br><br> H0 = Los grupos muestra homocedasticidad <br> H1 = Los grupos (al menos 2) no muestra homocedasticidad <br> ### Interpretación p-value > alfa: No rechazar H0 (homocedasticidad) <br> p-value < alfa: Rechazar H0 (no homocedasticidad) <br> > alpha hipotético 5% (0,05) ] .pull-right[ ```r # Una variable independiente bartlett.test(price ~ cut, data = diamonds) ``` .medium[ ``` ## ## Bartlett test of homogeneity of variances ## ## data: price by cut ## Bartlett's K-squared = 406.7, df = 4, p-value < 2.2e-16 ``` ] ```r # Múltiples variables independientes bartlett.test(price ~ interaction(cut,color), data=diamonds) ``` .medium[ ``` ## ## Bartlett test of homogeneity of variances ## ## data: price by interaction(cut, color) ## Bartlett's K-squared = 1965.3, df = 34, p-value < 2.2e-16 ``` ] ] --- ## Pueba de homocedasticidad Fligner-Killeen test .pull-left[ ### Fligner-Killeen test Para probar homocedasticidad en k grupos de muestras, donde k puede ser mayor a dos. Más robusto contra las desviaciones de la normalidad o cuando hay problemas relacionados con valores atípicos (outliers). <br><br> H0 = Los grupos muestra homocedasticidad <br> H1 = Los grupos (al menos 2) no muestra homocedasticidad <br> ### Interpretación p-value > alfa: No rechazar H0 (homocedasticidad) <br> p-value < alfa: Rechazar H0 (no homocedasticidad) <br> > alpha hipotético 5% (0,05) ] .pull-right[ ```r # Una variable independiente fligner.test(price ~ cut, data = diamonds) ``` .small[ ``` ## ## Fligner-Killeen test of homogeneity of variances ## ## data: price by cut ## Fligner-Killeen:med chi-squared = 1676.4, df = 4, p-value < 2.2e-16 ``` ] ```r # Múltiples variables independientes fligner.test(price ~ interaction(cut,color), data=diamonds) ``` .small[ ``` ## ## Fligner-Killeen test of homogeneity of variances ## ## data: price by interaction(cut, color) ## Fligner-Killeen:med chi-squared = 3332.1, df = 34, p-value < 2.2e-16 ``` ] ] --- class: inverse center middle ## Inferencia Estadística ### Análisis de correlación --- ## paquete-**Hmisc** y **corrplot** ```r # Instalar desde CRAN (The Comprehensive R Archive Network) install.packages("Hmisc") install.packages("corrplot") # Instalar la versión beta desde GitHub install.packages("devtools") devtools::install_github("harrelfe/Hmisc") devtools::install_github("taiyun/corrplot", build_vignettes = TRUE) ``` ```r # Cargar desde la librería library(Hmisc) library(corrplot) ``` .footnote[[{Hmisc}](https://hbiostat.org/R/Hmisc/) package <br> [{corrplot}](https://github.com/taiyun/corrplot) package] --- ## Correlación ### ¿Qué es la correlación? <br> La correlación es una medida estadística que nos informa sobre la asociación entre dos variables. Describe cómo se comporta una variable frente a algún cambio en la variable asociada.<br> ### Interpretación Si las variables aumentan o disminuyen juntas, entonces tendrán una correlación positiva. Si las variables son opuestas (una aumenta y la otra disminuye), entonces la correlación será negativa entre ellas. Si varían de forma independiente, la correlación entre ellos será cercana a cero.<br> -- .bg-washed-red.b--dark-red.ba.bw2.br3.shadow-5.ph4.mt4[ 1. Las correlaciones son la medida de dependencia lineal entre dos variables, solo se pueden aplicar entre pares. 1. Son sensibles al número de muestras. Si el número de muestras es pequeños (<20 ~ 30) el análisis pierde poder estadístico (óptimo ≥ 100)<br> .tr[ — _Advertencia_ ]] --- ### Métodos de Correlación Pearson: Evalúa la relación lineal entre dos variables continuas.<br> ```r cor(diamonds$price, diamonds$carat, use ="pairwise.complete.obs", method = "pearson") ``` ``` ## [1] 0.9215913 ``` -- Spearman: Evalúa la relación monótona. El coeficiente de correlación de Spearman se basa en los valores clasificados por ranking para cada variable en lugar de los datos brutos. <br> ```r dmnds <- diamonds %>% mutate(color=as.numeric(dplyr::recode(color, "D"="1", "E"="2", "F"="3", "G"="4", "H"="5", "I"="6", "J"="7"))) cor(dmnds$price, dmnds$color, use ="pairwise.complete.obs", method = "spearman") ``` ``` ## [1] 0.1501422 ``` -- Kendall: Evalúa la correlación de rangos: la semejanza en el ordenamiento de los datos cuando se agrupan en rangos. <br> ```r dmnds <- dmnds %>% mutate(cut=as.numeric(dplyr::recode(cut,"Ideal"="1", "Premium"="2", "Very Good"="3", "Good"="4", "Fair"="5"))) cor(dmnds$color, dmnds$cut, use ="pairwise.complete.obs", method = "kendall") ``` ``` ## [1] -0.01399794 ``` --- ### ¿Cómo gráfico múltiples correlaciones? .pull-left[ ```r # Seleccionar variables numéricas dmnds <- diamonds %>% select_if(is.numeric) %>% as.matrix() cor<-rcorr(dmnds, type = "spearman") # o pearson # Ajustar valor de p (múltiples comparaciones) cor$P.adj<-p.adjust(cor$P, method = "fdr") dim(cor$P.adj) <- dim(cor$P) # Gráfico corrplot(cor$r, method="circle", type="upper", col=brewer.pal(n=8, name="PuOr"), tl.col="black", tl.srt=90, p.mat = cor$P.adj, sig.level = 0.05, insig = "blank", pch.cex=0.9, pch.col = "white", diag=TRUE, title = NULL, mar = c(.1, .1, .1, .1)) ``` .footnote[[{corrplot}](https://github.com/taiyun/corrplot) package] ] .pull-right[ <img src="data:image/png;base64,#Sesion_002_files/figure-html/plot-corrplot-out-1.png" width="504" /> ] --- class: inverse center middle ## Inferencia Estadística ### Reducción de dimensión --- --- --- --- --- --- --- --- --- --- class: center, middle # Muchas Gracias!! Presentación creada en R con los paquetes: [xaringan](https://github.com/yihui/xaringan)<br> [xaringanthemer](https://github.com/gadenbuie/xaringanthemer)<br> [R Markdown](https://rmarkdown.rstudio.com).<br>